Copyright ã1995 by NeXT Computer, Inc.  All Rights Reserved.

IBDocuments

Adopted By:	no NEXTSTEP classes

Declared In:	apps/InterfaceBuilder.h

Protocol Description

This is the protocol to use to communicate with Interface Builder's document object.  The document object is private to Interface Builder but may be accessed by sending Interface Builder's subclass of Application an activeDocument message:

theActiveDoc = [NXApp activeDocument];

The document object maintains the components of a document: 

·	The object hierarchy
·	The list of connectors
·	The active editor

It also mediates in copy and paste operations and controls the redisplay of objects in Interface Builder.

Through the document object, you keep Interface Builder informed of changes to the data structure that you want archived in the nib file.  For example, if your custom editor allows the user to add an object by dragging it into the editor's window, you must inform Interface Builder of this addition by sending the document object an attachObject:to: message.  Interface Builder won't archive an object in the nib file unless it has been added to the object hierarchy.  (Note:  A paste operation, which uses the pasteType:fromPasteboard:parent: method, automatically updates the hierarchy.)

Method Types

Managing the document	- touch
- getDocumentPathIn:

Managing the object hierarchy	- attachObject:to:
- attachObjects:to:
- deleteObject:
- deleteObjects:
- copyObject:type:inPasteboard:
- copyObjects:type:inPasteboard:
- pasteType:fromPasteboard:parent:
- objectIsMember:
- getObjects:
- getParentForObject:

Setting object names	- setName:for:
- getNameIn:for:

Managing connectors	- addConnector:
- removeConnector:
- listConnectors:forSource:
- listConnectors:forDestination:
- listConnectors:forSource:filterClass:
- listConnectors:forDestination:filterClass:

Managing editors	- setSelectionFrom:
- editorDidClose:for:
- getEditor:for:
- openEditorFor:

Updating the display	- redrawObject:

Instance Methods

addConnector:

- addConnector:aConnector

Adds a connector object to the list maintained by Interface Builder.  (See the IBConnectors protocol for more information.)  This is the message a custom connection inspector sends Interface Builder's document object to register a connection.

See also:  - addConnector:

attachObject:to:

- attachObject:anObject to:parent

Adds anObject to the document's object hierarchy by attaching it to parent.  This method (and the related method attachObjects:to:) lets you keep the document's object hierarchy informed of changes in the objects under the control of your custom editor. 

See also:  - attachObjects:to:

attachObjects:to:

- attachObjects:(List *)objectList to:parent

Adds the objects in objectList to the document's object hierarchy by attaching them to parent.  This method (and the related method attachObject:to:) lets you keep the document's object hierarchy informed of changes in the objects under the control of your custom editor. 

See also:  - attachObject:to:

copyObject:type:inPasteboard:

- copyObject:anObject 
type:(NXAtom)type 
inPasteboard:(Pasteboard *)aPasteboard

Copies anObject to the specified pasteboard.  The type argument can be one of the following:

IBObjectPboardType
IBCellPboardType
IBMenuPboardType
IBMenuCellPboardType
IBViewPboardType
IBWindowPboardType

An editor should send the document object a copyObject:type:inPasteboard: or copyObjects:type:inPasteboard: message as part of its implementation of its copySelection method.   

See also:  - copyObjects:type:inPasteboard:

copyObjects:type:inPasteboard:

- copyObjects:(List *)objectList 
type:(NXAtom)type 
inPasteboard:(Pasteboard *)aPasteboard

Copies the objects in objectList to the specified pasteboard.  The type argument can be one of the following:

IBObjectPboardType
IBCellPboardType
IBMenuPboardType
IBMenuCellPboardType
IBViewPboardType
IBWindowPboardType

An editor should send the document object a copyObject:type:inPasteboard: or copyObjects:type:inPasteboard: message as part of its implementation of its copySelection method. 

See also:  - copyObject:type:inPasteboard:

deleteObject:

- deleteObject:anObject

Removes anObject from the document's object hierarchy.  An editor should send the document object a deleteObject: or deleteObjects: message as part of its implementation of the deleteSelection method.  This will keep the document's accounting of the objects in the nib document in agreement with the actual state of the document.

See also:  - deleteObjects:

deleteObjects:

- deleteObjects:(List *)objectList

Removes the objects in objectList from the document's object hierarchy.  An editor should send the document object a deleteObject: or deleteObjects: message as part of its implementation of the deleteSelection method.  This will keep the document's accounting of the objects in the nib document in agreement with the actual state of the document.

See also:  - deleteObject:

editorDidClose:for:

- editorDidClose:anEditor for:anObject

Informs the document object that anEditor is no longer active.  By sending this message to the document object when you close an editor, you keep Interface Builder's record of the active editor up to date.  Interface Builder itself invokes this method whenever an editor is closed because of a user action, such as the closing of a window.

getDocumentPathIn:

- getDocumentPathIn:(char *)buffer

Places the document's path in buffer.  This is the path displayed as the title of Interface Builder's File window.  Make sure that buffer is sufficiently larger to hold the path.  Returns the document object.

getEditor:for:

- getEditor:(BOOL)createIt for:anObject

Returns the editor object for anObject.  If createIt is YES and the editor hasn't been instantiated, it will be instantiated and returned.  If createIt is NO, the editor is returned only if it has already been instantiated.  If createIt is NO and the editor hasn't been instantiated, this method returns nil.

getNameIn:for:

- getNameIn:(char *)buffer for:anObject

Places the name associated with anObject in buffer.  Make sure the buffer you pass in is sufficiently large to accommodate the name.  Returns the document object.

See also:  - setName:for:

getObjects:

- getObjects:(List *)objectList

Places the objects from the document's object hierarchy into objectList.  The object's are not arranged in any particular order.  

getParentForObject:

- getParentForObject:anObject

Returns the object above anObject in the document's object hierarchy.  The top object is the File's owner.  Returns nil if anObject is the File's owner.

listConnectors:forDestination:

- listConnectors:(List *)aList forDestination:aDestination

Places in aList all connector objects whose destinations are aDestination.  Returns aList.

Since a given object can be the destination of multiple connections, the connection information is returned as a list of objects.  Each object in the list conforms to the IBConnectors protocol and contains the information for one connection.  

aList is a List object that you provide.  When you're done with aList, free it but don't free the connection objects within it since they're managed by Interface Builder.

See also:  - listConnectors:forDestination:filterClass:, - listConnectors:forSource:

listConnectors:forDestination:filterClass:

- listConnectors:(List *)aList 
forDestination:aDestination 
filterClass:aClass

Places in aList the connector objects of class aClass whose destinations are aDestination.  Returns aList.

Since a given object can be the destination of multiple connections, the connection information is returned as a list of objects.  Each object in the list conforms to the IBConnectors protocol and contains the information for one connection.  

aList is a List object that you provide.  When you're done with aList, free it but don't free the connection objects within it since they're managed by Interface Builder.

See also:  - listConnectors:forDestination:, - listConnectors:forSource:

listConnectors:forSource:

- listConnectors:(List *)aList forSource:aSource

Places in aList all connector objects whose sources are aSource.  Returns aList.

Since a given source can have multiple connections, the connection information is returned as a list of objects.  Each object in the list conforms to the IBConnectors protocol and contains the connection information for one connection.

aList is a List object that you provide.  When you're done with aList, free it but don't free the connection objects within it since they're managed by Interface Builder.

See also:  - listConnectors:forSource:filterClass:, - listConnectors:forDestination:

listConnectors:forSource:filterClass:

- listConnectors:(List *)aList 
forSource:aSource 
filterClass:aClass

Places in aList the connector objects of class aClass whose sources are aSource.  Returns aList.

Since a given source can have multiple connections, the connection information is returned as a list of objects.  Each object in the list conforms to the IBConnectors protocol and contains the connection information for one connection.

aList is a List object that you provide.  When you're done with aList, free it but don't free the connection objects within it since they're managed by Interface Builder.

See also:  - listConnectors:forSource:, - listConnectors:forDestination:

objectIsMember:

- (BOOL)objectIsMember:anObject 

Returns YES if anObject is a part of the document's object hierarchy; NO otherwise.  You might send an objectIsMember: message to the document object before attempting to open a subeditor for anObject.

openEditorFor:

- (BOOL)openEditorFor:anObject 

Opens the editor object for anObject.  This method ensures that editors for all the objects above anObject in the object hierarchy are open before opening anObject's editor.

pasteType:fromPasteboard:parent:

- (List *)pasteType:(NXAtom)type 
fromPasteboard:(Pasteboard *)thePasteboard 
parent:theParent

Alerts the document object that one or more objects were pasted.  Returns a List containing the ids of the objects that were pasted.  The pasteboard and the type being pasted are identified by thePasteboard and type.

An editor uses this method to keep Interface Builder's document object up to date.  The implementation of this method invokes attachObjects:to: and touch for you.  The List object that's returned lets you add the objects to your data structures.  It is your responsibility to free the returned List.   

redrawObject:

- redrawObject:anObject

Redraws the selected object by opening its editorÐand the editor for its parent object, and so on up the object hierarchyÐand sending each editor a resetObject: message.  

removeConnector:

- removeConnector:aConnector

Removes aConnector from the list of connectors maintained by Interface Builder.  (See the IBConnectors protocol for more information on connectors.)  This is the message a custom connection inspector sends Interface Builder's document object to break a connection.

Interface Builder doesn't free aConnector; it's your responsibility to do so.

See also:  - addConnector:

setName:for:

- (BOOL)setName:(const char *)name for:anObject

Sets the name associated with the anObject.  For objects in the File window, this is the name displayed below the object's image.  Except for objects in the File window, setting an object's name is generally not needed.

See also:  - getNameIn:for:

setSelectionFrom:

- setSelectionFrom:anEditor

Registers anEditor as the editor that owns the selection.

When you activate an editor or change the selection, make sure you send this message to the document object.  This keeps Interface Builder informed of the selection's owner.  In this way, when the user switches from one window to another, or from one document to another, Interface Builder can inform the proper editor to display its selection.  Also, Interface Builder uses the selection information to determine which inspector to display in its Inspector panel.

touch

- touch

Marks the document as edited by causing the File window's close box to display a broken ªXº.  Returns the document object.